// 身份验证插件
export default defineNuxtPlugin(nuxtApp => {
  // 获取运行时配置
  const config = useRuntimeConfig();
  // 检查cookie是否设置
  if (!config.public.cookie) {
    throw new Error('env cookie is not defined');
  }
  // 使用 cookie 存储认证状态，支持 SSR
  const authToken = useCookie('auth_token', {
    default: () => null,
    secure: config.public.cookie.secure, // 生产环境必须使用https
    sameSite: config.public.cookie.sameSite, // 严格
    maxAge: config.public.cookie.maxAge // 过期时间
  });
  // 创建一个响应式的身份验证状态
  const auth = reactive({
    user: null,
    token: null,
    isAuthenticated: false,
    // 初始化身份验证状态
    init() {
      if (import.meta.client) {
        const userStr = localStorage.getItem('user');
        this.user = userStr ? JSON.parse(userStr) : null;
      }
      if (authToken.value) {
        try {
          this.token = authToken.value;
          this.isAuthenticated = true;
        } catch (error) {
          console.error('解析登录信息失败:', error);
          this.logout();
        }
      }
    },
    // 设置身份验证状态
    setAuth(token, user) {
      this.token = token;
      this.user = user;
      this.isAuthenticated = true;
      // 自动设置设置 Cookie！
      authToken.value = token;  
      localStorage.setItem('user', JSON.stringify(user));
    },
    // 保存记住我的凭证
    saveRememberCredentials(username, token) {
      localStorage.setItem('remember_credentials', JSON.stringify({
        username,
        token
      }));
    },
    // 登出
    logout() {
      this.token = null;
      this.user = null;
      this.isAuthenticated = false;
      // 清除存储的登录状态
      authToken.value = null;
      localStorage.removeItem('user');
      // 重定向到首页
      navigateTo('login?redirect=/admin');
    }
  });
  
  // 初始化身份验证状态
  auth.init();
  
  // 提供给应用使用
  return {
    provide: {
      auth
    }
  };
});